'''
Author: didiplus
Date: 2024-09-30 16:00:47
LastEditTime: 2024-10-15 16:20:23
LastEditors: didiplus
Description: 
FilePath: \pythonscript\python\趣学Python算法100例\16、分糖果\demo.py
'''
# 函数：判断列表中各成员是否相等
# candy：保存糖果数量的列表
def judge(candy):
    for i in range(0, 10):
        if candy[0] != candy[i]:
            return 1  # 不相同返回1
    return 0  # 相同返回0
 
 
# 输出列表中每个元素的值
# s: 要打印的列表
# j: 需要打印的次数计数器
def print_result(s, j):
    print("%4d" % j, end=" ")
    for k in range(10):    # 打印列表
        print("%4d" % s[k], end=" ")
    print()     # 换行
 
# 分糖的函数
# sweet: 保存糖果数量的列表
# j: 计数器，记录分糖的次数
def giveSweets(sweet, j):
    t = [0] * 10      # 临时表，保存每次分出去的一半糖
    while (judge(sweet)):  # 若不满足要求则继续循环
        # 将每个孩子手中的糖果数平分为两份，放到t列表中
        for i in range(0, 10):
            if sweet[i] % 2 == 0:  # 若为偶数则直接分出一半
                sweet[i] = sweet[i] // 2
                t[i] = sweet[i]
            else:  # 若为奇数则加1后再分出一半
                sweet[i] = (sweet[i] + 1) // 2
                t[i] = sweet[i]
 
        # 将分出的一半糖果t[n] 给右边的孩子 sweet[n + 1]
        for n in range(0, 9):
            sweet[n + 1] = sweet[n + 1] + t[n]
        sweet[0] += t[9]     # 第10个分出去的一个t[9],给第一个孩子:sweet[0]
        j += 1      # 计数器加1
        print_result(sweet, j)    # 打印本次分糖后的结果
 
 
# 定义列表sweet,存储老师给每个孩子分配的糖果数
# sweet[0]=10表示第一个小孩的糖果数为10，以此类推
sweet = [10, 2, 8, 22, 16, 4, 10, 6, 14, 20]
print("次数 各人糖果数")
j = 0      # 计数器，保存分糖的次数
# 输出每个孩子手中的糖果数
print("%4d" % j, end=" ")
for i in range(len(sweet)):
    print("%4d" % sweet[i], end=" ")
print()
# 开始分糖
giveSweets(sweet, j)  # 调用分糖果函数  
